/**
 *
 * @description: symbol
 * @author: junyong.hong
 * @createTime: 2018/3/28
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
{
    // 声明
    let a1 = Symbol();
    let a2 = Symbol();
    // false
    console.log(a1 === a2);

    // 'a3'是一个key值
    let a3 = Symbol.for('a3');
    let a4 = Symbol.for('a3');
    // true
    console.log(a3 === a4);
}

{
    // 使用场景：两个相同的名字，不想去改变
    let a1 = Symbol.for('abc');
    let obj = {
        [a1]:'123',
        'abc':'345',
        'c':456
    };
    console.log(obj);       // {abc: "345", c: 456, Symbol(abc): "123"}

    // symbol的值取不到
    for(let [key,value] of Object.entries(obj)){
        // let of abc 345
        // let of c 456
        console.log('let of', key, value);
    }

    // 取到symbol的值
    Object.getOwnPropertySymbols(obj).forEach(function (item) {
        // 123
        console.log(obj[item])
    });

    // 两种参数的值都可以获取到
    Reflect.ownKeys(obj).forEach(function (item) {
        // ownKeys abc 345
        // ownKeys c 456
        // ownKeys Symbol(abc) 123
        console.log('ownKeys', item, obj[item]);
    })
}







